//负责聊天socket.io事件 绑定处理模块
const chatServer = require("../service/chatServer");
const getCookie = require("../utils/cookie");

 
let clients = []; //存储所有的客户端数据 （uuid , 临时的名字 ， socket.id）

let servers = [{
    uid:'',
    sid:'73426300-639c-11ea-858b-09ef3835ccc8',
    nick:"小萝莉",
    status:1,//在线状态 0 离线 , 1在线
}];//存储所有的客服端数据 

//检测当前用户是否已经记录过了
function isInClients(uid){
    for(let index in clients){
        if(clients[index].uid == uid){
            return true;
        }
    }
    return false;
} 

//检测当前客服 是否已经记录过在servers中
function isInServers(uid){
    for(let index in servers){
        if(servers[index].uid == uid){
            return true;
        }
    }
    return false;
}

//ws连接事件 （不区分client 和 server）
chatServer.on("connection",(socket)=>{
    let role = socket.handshake.query.type; //获取当前连接的终端类型： 区分client（用户） 和 server（客服）
    console.log("当前连接类型为:",role)

     servers.uid=socket.id;
     //获取cookie
     let cookies = getCookie(socket.handshake.headers.cookie);
     let uid = cookies.uuid;
    // console.log(uid);
    //存储当前接入的用户的socket , 需要根据访问的终端类型
    if(role == "client"){
        //处理用户上线
        if(isInClients(uid)){
                //此处应该更新当前用户的在线状态，和socket.id
                console.log("老客户：",uid)
        }else{
            clients.push({
                uid:uid,
                sid:socket.id,
                nick:"游客"+(clients.length+1),
                status:1,//在线状态 0 离线 , 1在线
            })
            console.log('新客户:',clients)
        }
        //向客服端推送当前有访客进来的消息提示
        //定向推送消息（room）每个用户的socket.id 就是一个房间 ，当然也 可以创建房间
        //此处会有一种可能，就是当前没有客服在线
        if(servers.length<=0){
            console.log('没有客服在线...',servers);
        }else{
            socket.to(servers[0].sid).emit('client-online-event',{data:clients});
            sendPush(socket,servers[0])
            console.log('已经推送最新客户列表到前台客服！')
        }
        
    }else{
        //客服上线
        if(isInServers(uid)){
            //此处应该更新当前用户的在线状态，和socket.id
            servers[0].sid = socket.id;
            servers[0].status = 1;
            console.log('老客服上线',uid)
        }else{ //新增客服
            console.log('新增客服',uid)
            servers.push({
                uid:uid,
                sid:socket.id,
                nick:"小萝莉",
                status:1,//在线状态 0 离线 , 1在线 
            })          
            // console.log("客服：",servers);
        }
        //对上线的客服， 推送当前在线的用户信息
        // sendPush(socket,socket.id);
    }

    //绑定用户发送的消息事件 转发消息给客服
    socket.on('user-message',(data)=>{
        console.log('已经收到用户的消息：',data);
        //将消息数据，发送给客服
        socket.to(servers[0].sid).emit('server-message',data)
    })
   
    // console.log("角色：",role,"uid:",uid);
    // console.log('用户：',clients);
    // console.log("客服：",servers);

    function sendPush(socket,sid){ //定时更新在线客户列表
        setTimeout(()=>{
            socket.to(sid).emit('client-online-event',{data:clients});
        },1000);
    }
})

